#!/usr/bin/env python 
# -*- coding: utf-8 -*-
'''
Created on 15/08/2013

@author: hackma00100
'''
from socket import socket
class HipnoRed(object):
    '''
    classdocs
    '''

    def __init__(self, ip, port, isEnviando, family, protocol):
        print 'inicio'
        
        '''
        if protocol == "DATAGRAMA" and family != 5:
            protocolfinal = socket.SOCK_DGRAM
        elif protocol == "STREAM" and family != 5:
            protocolfinal = socket.SOCK_STREAM
        elif protocol == "RAW" and family != 5:
            protocolfinal = socket.SOCK_RAW
        
        
        if family == 6:
            self.socket_s = socket(socket.AF_INET6, protocolfinal)
        elif family == 4:
            self.socket_s = socket(socket.AF_INET, protocolfinal)
            print 'entro'
        elif family == 5:
            self.socket_s = socket(socket.AF_UNIX, protocolfinal)
         '''   
        self.socket_s = socket()
        self.ip = ip
        self.port= port
        print 'enviando ' , isEnviando
        if isEnviando:
            self.__conection()
        
    def listen(self, ip, port, max_conection):
        if ip == None and port == None:
            self.socket_s.bind((self.ip, self.port))
        elif ip == None and port != None:
            self.socket_s.bind((self.ip, port))
        elif ip != None and port == None:
            self.socket_s.bind((ip, self.port))
        else:
            self.socket_s.bind((ip, port))

        if max_conection == None:
            self.socket_s.listen(1)
        else:
            self.socket_s.listen(max_conection)
        
        print 'Escuchando ...'
        self.socket_sc, (host_c, puerto_c) = self.socket_s.accept()
        while True:
            recibido = self.socket_sc.recv(1024)
            print "recibido de ", host_c, " port ", puerto_c, "Mensaje " , recibido
            return recibido
        
    def send(self, contenido):
        try:
            self.socket_s.send(contenido)
        except:
            "No se permitio una solicitud para enviar o recibir datos ya que el socket no está conectado y no se ha proporcionado ninguna direccion, al realizar el envio en un socket de datagramas por medio de una llamada send"
        
    def __conection(self):
        try:
            if hasattr(self.port, "__int__"):
                self.socket_s.connect((self.ip, self.port));
                print 'establecio la conexion'
            else:
                print 'Usted no ingreso un parametro correctamente, recuerde el puerto debe ser entero'
        except Exception, e:
            print e
            print "No se puede establecer una conexión ya que el equipo de destino denego expresamente dicha conexion"
           

    def __del__(self):
        #self.socket_sc.close()
        print 'elimino'
        self.socket_s.close();